package com.ruoyi.student.service;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import com.ruoyi.student.domain.StudentInfo;
import com.ruoyi.student.domain.vo.StudentInfoVo;
import com.ruoyi.student.domain.vo.StudentRegVo;
import com.ruoyi.student.domain.vo.studentDetailedVo;
import com.ruoyi.trainingManagement.domain.CourseScheduleDetails;
import com.ruoyi.trainingManagement.domain.CourseStudentInfo;
import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.teacher.mapper.teacherMapper;
/**
 * 学生信息管理Service接口
 *
 * @author gdslovehy
 * @date 2025-04-24
 */
public interface IStudentInfoService
{
    /**
     * 查询学生信息管理
     *
     * @param id 学生信息管理主键
     * @return 学生信息管理
     */
    public StudentInfo selectStudentInfoById(String id);

    public StudentInfo selectStudentInfoByStudentId(String studentId);
    /**
     * 查询学生信息管理列表
     *
     * @param studentInfo 学生信息管理
     * @return 学生信息管理集合
     */
    public List<StudentInfo> selectStudentInfoList(StudentInfo studentInfo);
    /**
     * 通过专业ID、学期查询学生信息列表
     */
    public List<StudentInfo> selectStudentInfoListByZyAndNj(String student_zy,String student_nj);


    int assignTrainingToStudents(String trainingProgramId, List<String> studentIds);

    /**
     * 新增学生信息管理
     *
     * @param studentInfo 学生信息管理
     * @return 结果
     */
    public int insertStudentInfo(StudentInfo studentInfo);

    /**
     * 修改学生信息管理
     *
     * @param studentInfo 学生信息管理
     * @return 结果
     */
    public int updateStudentInfo(StudentInfo studentInfo);

    /**
     * 批量删除学生信息管理
     *
     * @param ids 需要删除的学生信息管理主键集合
     * @return 结果
     */
    public int deleteStudentInfoByIds(String[] ids);

    /**
     * 删除学生信息管理信息
     *
     * @param id 学生信息管理主键
     * @return 结果
     */
    public int deleteStudentInfoById(String id);
    /**
     * 传入培养方案列表，遍历列表查询对应的学生列表信息
     */
    List<StudentInfo> selectStudentInfoListByTrainingProgramIds(List<String> trainingProgramId);

    /*
     * 传入多个学生id以及一个行政班id，批量将学生分配到该行政班，讲行政班ID添加到学生信息表中
     *
     * */
    @Transactional
    void assignStudentsToClass(String adminClassId, List<String> studentIds);

    public Map<String, List<CourseStudentInfo>> generateClassList(List<StudentInfo> students, Map<String, Object> data, List<CourseScheduleDetails> allCreatedClasses);

    public void saveCourseStudentAssignments(Map<String, List<CourseStudentInfo>> courseStudentMap);

    public Map<String, List<CourseStudentInfo>> assignStudentsToMasterClass(List<StudentInfo> students, Map<String, Object> data, List<CourseScheduleDetails> allCreatedClasses);

    public int clearAll();

    /*根据学生ID获取对应的 studentName;trainingProgramName;collegeName;majorName;*/
    studentDetailedVo getStudentDetailedInfo(String studentId);
    /**
     * 批量插入学生信息
     *
     * @param studentList 学生信息列表
     * @return 插入结果
     */
    public int batchInsert(List<StudentInfo> studentList);

    /*
     *根据培养方案ID查询对应的学科列表，根据列表中的培养方案ID获取对应的学生名单
     */
    List<StudentInfo> selectStudentInfoListByTrainingProgramIdAndSubject(String trainingProgramId);

     public StudentRegVo getStudentReVoByStudentId(String studentId);

    public List<StudentInfo> selectStudentInfoByStudentIds(ArrayList<String> strings);
    /**
     * 新增
     * 根据学号更新学生注册状态（同步 student_info 表的 studentZczt）
     * @param studentId 学号
     * @param zczt 注册状态文本（如“已通过”“待审核”）
     * @return 影响行数
     */
    int updateStudentZcztByStudentId(String studentId, String zczt);

    public StudentInfo getStudentByStudentId(String studentId);

    public List<StudentInfoVo> selectStudentInfoVoList(StudentInfoVo studentInfoVo);
    public List<StudentInfo> getAllStudentInfoList(StudentInfo studentInfo);

    //根据登录用户的信息返回对应的collegeId列表
    List<String> selectCollegeIdsByDeptIds();

    //根据登录用户的信息返回对应的college_code列表
    List<String> selectCollegeCodesByDeptIds();

    List<StudentInfo> selectStudentIdsByCollegeCodes(List<String> collegeCodes,StudentInfo studentInfo);

    String selectStudentCollegeCodesByStudentId(String initiatorId);

}
